﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SanFranciscoModel.Intermedias;
using SanFranciscoModel.Materia;
using SanFranciscoModel.Maestros;

namespace SanFranciscoModel.Docente
{
    public class DocenteManager
    {

        public void guardarDocente(Docente docente)
        {
            DocenteDataContext db = new DocenteDataContext();
            try
            {
                db.Docentes.InsertOnSubmit(docente);
                db.SubmitChanges();
            }
            catch (Exception e)
            {
            }
        }

        

        //Devuelve la fecha a cargar, en base al calendariolectivo, teniendo en cuenta lo ya cargado antes
        public DateTime getProximaFechaAsistenciaCargar(int idCurso)
        {
            List<AsistenciaDocente> ListAsistenciaDocente = new List<AsistenciaDocente>();
            AsistenciaDocenteDataContext db = new AsistenciaDocenteDataContext();
            DateTime max = new DateTime();

            var objeto = from x in db.AsistenciaDocentes
                         where x.IdCurso == idCurso
                         select x;

            foreach (var aa in objeto)
            {
                if (aa.Fecha > max)
                    max = aa.Fecha;
            }


            //en max tengo la ultima fecha cargada, ahora tengo que obtener la proxima del calendario lectivo
            List<DateTime> ListCalendariolectivoTemp = MaestroManager.getAllCalendarioLectivo();
            List<DateTime> ListCalendariolectivo = ListCalendariolectivoTemp.OrderBy(p => p.Date).ToList();

            bool freno = false;
            foreach (DateTime dt in ListCalendariolectivo)
            {

                if (dt > max && freno == false)
                {
                    freno = true;
                    max = dt;
                }
            }
            return max;
        }

        public List<MateriaXDocente> getAllMateriaXDocente()
        {
            List<MateriaXDocente> ListMateriaXDocente = new List<MateriaXDocente>();
            MateriaXDocenteDataContext db = new MateriaXDocenteDataContext();

            var objeto = from x in db.MateriaXDocentes
                         select x;

            foreach (var docen in objeto)
            {
                ListMateriaXDocente.Add(docen);
            }

            return ListMateriaXDocente;
        }

        public List<MateriaXDocente> getAllMateriaXDocenteCorrect()
        {
            List<MateriaXDocente> ListMateriaXDocente = new List<MateriaXDocente>();
            MateriaXDocenteDataContext db = new MateriaXDocenteDataContext();

            var objeto = from x in db.MateriaXDocentes
                         select x;

            foreach (var docen in objeto)
            {
                ListMateriaXDocente.Add(docen);
            }

            return ListMateriaXDocente;
        }

        public List<MateriaXDocente> getAllMateriaXDocenteByIdDocente(int DNI)
        {
            List<MateriaXDocente> ListMateriaXDocente = new List<MateriaXDocente>();
            MateriaXDocenteDataContext db = new MateriaXDocenteDataContext();

            var objeto = from x in db.MateriaXDocentes
                         where x.DNIDocente==DNI
                         select x;

            foreach (var docen in objeto)
            {
                ListMateriaXDocente.Add(docen);
            }

            return ListMateriaXDocente;
        }

        public void modificarDocente(Docente docente)
        {
            DocenteDataContext db = new DocenteDataContext();

            var objeto = from docen in db.Docentes
                         where docente.DNIDocente == docente.DNIDocente
                         select docen;

            foreach (var doc in objeto)
            {
                if (doc.DNIDocente == docente.DNIDocente)
                {
                    doc.Nombre = docente.Nombre;
                    doc.Apellido = docente.Apellido;
                    doc.Direccion = docente.Direccion;
                    doc.FechaNacimiento = docente.FechaNacimiento;
                    doc.Nacionalidad = docente.Nacionalidad;
                    doc.Sexo = docente.Sexo;
                    doc.Telefono = docente.Telefono;
                }
            }

            try
            {
                db.SubmitChanges();
            }
            catch
            {
            }
        }

        public Docente getDocenteTitularbyDNI(int DNI)
        {
            Docente Docente = new Docente();
            DocenteDataContext db = new DocenteDataContext();

            var objeto = from docente in db.Docentes
                         where docente.DNIDocente == DNI
                         && docente.Activo == true
                         && docente.Suplente == false
                         select docente;

            foreach (var docen in objeto)
            {
                Docente = docen;
            }

            return Docente;
        }

        public Docente getDocentebyDNI(int DNI)
        {
            Docente Docente = new Docente();
            DocenteDataContext db = new DocenteDataContext();

            var objeto = from docente in db.Docentes
                         where docente.DNIDocente == DNI
                         && docente.Activo == true
                         select docente;

            foreach (var docen in objeto)
            {
                Docente = docen;
            }

            return Docente;
        }

        public void guardarInasistenciaDocente(AsistenciaDocente AsistenciaDocente)
        {
            AsistenciaDocenteDataContext db = new AsistenciaDocenteDataContext();
            try
            {
                db.AsistenciaDocentes.InsertOnSubmit(AsistenciaDocente);
                db.SubmitChanges();
            }
            catch (Exception e)
            {
                string a = e.ToString();
            }
        }



        public List<Docente> getDocentebyIdMateria(int idMateria)
        {
            List<Docente> ListDocente = new List<Docente>();

            MateriaXDocenteDataContext db = new MateriaXDocenteDataContext();

            var objeto = from docente in db.MateriaXDocentes
                         where docente.idMateria == idMateria
                         select docente;

            foreach (var docen in objeto)
            {
                Docente doc = getDocenteTitularbyDNI(docen.DNIDocente);
                if(doc.Apellido!=null)
                ListDocente.Add(doc);
            }

            return ListDocente;
        }

        public List<Docente> getDocenteAll()
        {
            List<Docente> ListDocente = new List<Docente>();
            DocenteDataContext db = new DocenteDataContext();

            var objeto = from docente in db.Docentes
                         where docente.Activo == true
                         select docente;

            foreach (var docen in objeto)
            {
                ListDocente.Add(docen);
            }

            return ListDocente;
        }

        public List<Docente> getDocenteAllEnActividad()
        {
            List<Docente> ListDocente = new List<Docente>();
            DocenteDataContext db = new DocenteDataContext();

            var objeto = from docente in db.Docentes
                         where docente.Activo == true
                         && docente.Suplente==false
                         select docente;

            foreach (var docen in objeto)
            {
                //si no esta en ningun curso lo agrego
                List<HorarioDocente> ListHorarioDocente = getHorarioDocenteByDNI(docen.DNIDocente);
                if (ListHorarioDocente.Count > 0)
                ListDocente.Add(docen);
            }

            return ListDocente;
        }

        

        public List<Docente> getSuplenteDisponibleAll()
        {
            List<Docente> ListDocente = new List<Docente>();
            DocenteDataContext db = new DocenteDataContext();

            

            var objeto = from docente in db.Docentes
                         where docente.Activo == true
                         && docente.Suplente==true
                         select docente;

            foreach (var docen in objeto)
            {
                //si no esta en ningun curso lo agrego
                List<HorarioDocente> ListHorarioDocente = getHorarioDocenteByDNI(docen.DNIDocente);
                if (ListHorarioDocente.Count==0)
                ListDocente.Add(docen);
            }

            return ListDocente;
        }

        public List<SuplenciaTemporal> getSuplenciasAll()
        {
            List<SuplenciaTemporal> ListSuplenciaTemporal = new List<SuplenciaTemporal>();
            SuplenciaTemporalDataContext db = new SuplenciaTemporalDataContext();



            var objeto = from docente in db.SuplenciaTemporals
                         select docente;

            foreach (var docen in objeto)
            {
                ListSuplenciaTemporal.Add(docen);
            }

            return ListSuplenciaTemporal;
        }

        public bool ExisteDocente(int DNI)
        {
            Docente Docente = new Docente();
            DocenteDataContext db = new DocenteDataContext();

            var objeto = from docente in db.Docentes
                         where docente.DNIDocente == DNI
                         && docente.Activo == true
                         select docente;

            foreach (var docen in objeto)
            {
                Docente = docen;
            }

            if (Docente.DNIDocente == DNI)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public bool ExisteDesempenoDocente(int DNI, int idCurdo, int idMateria)
        {
            DesempeñoDocente DesempeñoDocente = new DesempeñoDocente();
            DesempeñoDocenteDataContext db = new DesempeñoDocenteDataContext();

            var objeto = from d in db.DesempeñoDocentes
                         where d.DNIDocente == DNI
                         && d.idCurso == idCurdo
                         && d.idMateria == idMateria
                         select d;

            foreach (var docen in objeto)
            {
                DesempeñoDocente = docen;
            }

            if (DesempeñoDocente.DNIDocente == DNI && DesempeñoDocente.idCurso == idCurdo && DesempeñoDocente.idMateria == idMateria)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public bool EliminarDocente(int dni)
        {
            Docente Docente = new Docente();
            DocenteDataContext db = new DocenteDataContext();

            var objeto = from docente in db.Docentes
                         where docente.DNIDocente == dni
                         select docente;

            foreach (var docen in objeto)
            {
                docen.Activo = false;//Le doy la baja logica
            }

            try
            {
                db.SubmitChanges();
                return true;
            }
            catch
            {
                return false;
            }
        }


        public void guardarDesempeñoDocente(int _DNI, int idCurso, int idMateria, int nota, string aclaraciones)
        {
            DesempeñoDocente DesempeñoDocente = new SanFranciscoModel.Docente.DesempeñoDocente();
            DesempeñoDocenteDataContext db = new DesempeñoDocenteDataContext();

            DesempeñoDocente.DNIDocente = _DNI;
            DesempeñoDocente.Aclaraciones = aclaraciones;
            DesempeñoDocente.idCurso = idCurso;
            DesempeñoDocente.idMateria = idMateria;
            DesempeñoDocente.NotaDesempeño = nota;

            try
            {
                db.DesempeñoDocentes.InsertOnSubmit(DesempeñoDocente);
                db.SubmitChanges();
            }
            catch (Exception e)
            {
            }
        }

        public void guardarHorariosDocente(List<HorarioDocente> _ListHorarioDocente)
        {
            List<HorarioDocente> ListHorarioDocente = new List<HorarioDocente>();
            HorarioDocenteDataContext db = new HorarioDocenteDataContext();
            MateriaXCursoDataContext db2 = new MateriaXCursoDataContext();

            foreach (HorarioDocente hr in _ListHorarioDocente)
            {
                try
                {
                    db.HorarioDocentes.InsertOnSubmit(hr);
                    db.SubmitChanges();
                }
                catch (Exception e)
                {
                }
            }
            //  MateriaManager mn = new MateriaManager();

            List<MateriaXCurso> listMxC = new List<MateriaXCurso>();
            foreach (HorarioDocente hr in _ListHorarioDocente)
            {
                MateriaXCurso mxc = new MateriaXCurso();
                mxc.idCurso = hr.IdCurso;
                mxc.idMateria = hr.IdMateria;
                if (!(listMxC.Contains(mxc)))
                {
                    listMxC.Add(mxc);
                }
            }
            foreach (MateriaXCurso hr in listMxC)
            {
                try
                {
                    db2.MateriaXCursos.InsertOnSubmit(hr);
                    db2.SubmitChanges();
                }
                catch (Exception e)
                {
                }
            }


        }

        public void updateHorariosDocente(List<HorarioDocente> _ListHorarioDocente, List<HorarioDocente> ListDocenteHorarioAnterior, int idCurso)
        {
            try
            {
                List<HorarioDocente> ListHorarioDocente = new List<HorarioDocente>();
                MateriaXCursoDataContext db2 = new MateriaXCursoDataContext();

                //Primero elimino lo anterior
                foreach (HorarioDocente hr in ListDocenteHorarioAnterior)
                {

                    HorarioDocenteDataContext db = new HorarioDocenteDataContext();

                    var objeto = from docente in db.HorarioDocentes
                                 where docente.IdCurso == hr.IdCurso
                                 && docente.IdDia == hr.IdDia
                                 && docente.IdDocente == hr.IdDocente
                                 && docente.IdHora == hr.IdHora
                                 && docente.IdMateria == hr.IdMateria
                                 select docente;

                    foreach (var docen in objeto)
                    {
                        db.HorarioDocentes.DeleteOnSubmit(docen);
                        db.SubmitChanges();
                    }


                }


                //Guardo lo nuevo
                HorarioDocenteDataContext dbN = new HorarioDocenteDataContext();
                foreach (HorarioDocente hr in _ListHorarioDocente)
                {
                    try
                    {
                        dbN.HorarioDocentes.InsertOnSubmit(hr);
                        dbN.SubmitChanges();
                    }
                    catch (Exception e)
                    {
                    }
                }

                //elimino materia por curso
                MateriaManager MateriaManager = new Materia.MateriaManager();
                List<MateriaXCurso> ListMxcEliminar = MateriaManager.getMateriaXCursoByIdCurso(idCurso);
                foreach (MateriaXCurso mxc in ListMxcEliminar)
                {
                    MateriaXCursoDataContext dbmxc = new MateriaXCursoDataContext();

                    var objeto = from x in dbmxc.MateriaXCursos
                                 where x.idCurso == mxc.idCurso
                                 && x.idMateria == mxc.idMateria
                                 select x;

                    foreach (var x in objeto)
                    {
                        dbmxc.MateriaXCursos.DeleteOnSubmit(x);
                        dbmxc.SubmitChanges();
                    }
                }


                //guardo el nuevo materia por curso
                List<MateriaXCurso> listMxC = new List<MateriaXCurso>();
                foreach (HorarioDocente hr in _ListHorarioDocente)
                {
                    MateriaXCurso mxc = new MateriaXCurso();
                    mxc.idCurso = hr.IdCurso;
                    mxc.idMateria = hr.IdMateria;
                    if (!(listMxC.Contains(mxc)))
                    {
                        listMxC.Add(mxc);
                    }
                }
                foreach (MateriaXCurso hr in listMxC)
                {
                    try
                    {
                        db2.MateriaXCursos.InsertOnSubmit(hr);
                        db2.SubmitChanges();
                    }
                    catch (Exception e)
                    {
                    }
                }
            }
            catch (Exception e)
            {
                int a = 1;
            }

        }

        public static List<MateriaCursoDocenteHorario> getMateriaCursoDocenteHorarioAll()
        {
            List<MateriaCursoDocenteHorario> MateriaCursoDocenteHorarioList = new List<MateriaCursoDocenteHorario>();


            //Traigo todos los horarios

            MateriaCursoDocenteHorarioDataContext db = new MateriaCursoDocenteHorarioDataContext();

            var objeto = from x in db.MateriaCursoDocenteHorarios
                         select x;

            foreach (var x in objeto)
            {
                MateriaCursoDocenteHorarioList.Add(x);
            }
            return MateriaCursoDocenteHorarioList;
        }




        public static Docente getDocentesLibresParaElHorario(int idHorario)
        {
            //traigo todos los MateriaCursoDocenteHorario
            List<MateriaCursoDocenteHorario> MateriaCursoDocenteHorarioList = getMateriaCursoDocenteHorarioAll();
            Docente Docente = new Docente();
            DocenteManager DocenteManager = new DocenteManager();

            foreach (MateriaCursoDocenteHorario mcdh in MateriaCursoDocenteHorarioList)
            {
                if (mcdh.idHorario != idHorario)
                    Docente = DocenteManager.getDocentebyDNI(mcdh.DNIDocente);
            }
            return Docente;
        }

        public static List<Docente> getDocentesLibresParaElHorario(int idDia, int idHora, int idMateria)
        {
            DocenteManager DocenteManager = new DocenteManager();

            List<HorarioDocente> ListHorarioDocente = new List<HorarioDocente>();
            List<Docente> ListDocenteFull = DocenteManager.getDocentebyIdMateria(idMateria);
            List<Docente> ListDocente = new List<Docente>();

            HorarioDocenteDataContext db = new HorarioDocenteDataContext();

            var objeto = from x in db.HorarioDocentes
                         where x.IdDia == idDia
                         && x.IdHora == idHora
                         select x;

            foreach (var x in objeto)
            {
                foreach (Docente d in ListDocenteFull)
                {
                    if (x.IdDocente != d.DNIDocente)
                        ListDocente.Add(d);
                }
            }

            return ListDocente;
        }


        public static bool EstaOcupadoElDocente(int idHorario)
        {
            //traigo todos los MateriaCursoDocenteHorario
            List<MateriaCursoDocenteHorario> MateriaCursoDocenteHorarioList = getMateriaCursoDocenteHorarioAll();
            foreach (MateriaCursoDocenteHorario mcdh in MateriaCursoDocenteHorarioList)
            {
                if (mcdh.idHorario == idHorario)
                    return true;
            }
            return false;
        }

        public static List<DesempeñoDocente> getDesempeñoDocenteByDNI(int DNIDocente)
        {
            List<DesempeñoDocente> ListDesempeñoDocente = new List<DesempeñoDocente>();

            DesempeñoDocenteDataContext db = new DesempeñoDocenteDataContext();

            var objeto = from x in db.DesempeñoDocentes
                         where x.DNIDocente == DNIDocente
                         select x;

            foreach (var x in objeto)
            {
                ListDesempeñoDocente.Add(x);
            }

            return ListDesempeñoDocente;
        }

        public static List<HorarioDocente> getHorarioDocenteByDNI(int DNIDocente)
        {
            List<HorarioDocente> ListHorarioDocente = new List<HorarioDocente>();

            HorarioDocenteDataContext db = new HorarioDocenteDataContext();

            var objeto = from x in db.HorarioDocentes
                         where x.IdDocente == DNIDocente
                         select x;

            foreach (var x in objeto)
            {
                ListHorarioDocente.Add(x);
            }

            return ListHorarioDocente;
        }

        public static List<HorarioDocente> getHorarioDocenteByIdCurso(int IdCurso)
        {
            List<HorarioDocente> ListHorarioDocente = new List<HorarioDocente>();

            HorarioDocenteDataContext db = new HorarioDocenteDataContext();

            var objeto = from x in db.HorarioDocentes
                         where x.IdCurso == IdCurso
                         select x;

            foreach (var x in objeto)
            {
                ListHorarioDocente.Add(x);
            }

            return ListHorarioDocente;
        }

        public static List<Docente> getListDocenteByIdCurso(int IdCurso)
        {
            List<Docente> ListDocente = new List<Docente>();

            HorarioDocenteDataContext db = new HorarioDocenteDataContext();

            var objeto = from x in db.HorarioDocentes
                         where x.IdCurso == IdCurso
                         select x;

            foreach (var x in objeto)
            {
                DocenteManager DocenteManagaer = new DocenteManager();
                ListDocente.Add(DocenteManagaer.getDocentebyDNI(x.IdDocente));
            }

            return ListDocente;
        }

        public static List<HorarioDocente> getHorarioDocenteByIdDocente(int IdDocente)
        {
            List<HorarioDocente> ListHorarioDocente = new List<HorarioDocente>();

            HorarioDocenteDataContext db = new HorarioDocenteDataContext();

            var objeto = from x in db.HorarioDocentes
                         where x.IdDocente == IdDocente
                         select x;

            foreach (var x in objeto)
            {
                ListHorarioDocente.Add(x);
            }

            return ListHorarioDocente;
        }

        public static string ComprobarDisponibilidadDiayHoraDocente(HorarioDocente HorarioDocente)
        {
            List<HorarioDocente> ListHorarioDocente = GetAllDocenteHorario();
            string Mensaje = string.Empty;
            DocenteManager dm = new DocenteManager();

            foreach (HorarioDocente hr in ListHorarioDocente)
            {
                if (hr.IdDia == HorarioDocente.IdDia && hr.IdHora == HorarioDocente.IdHora && hr.IdDocente == HorarioDocente.IdDocente)
                {
                    Mensaje = "El Docente " + dm.getDocentebyDNI(HorarioDocente.IdDocente).Nombre + " " + dm.getDocentebyDNI(HorarioDocente.IdDocente).Apellido + " Ya posee ocupado el horario que selecciono, por favor elija otro docente!";
                }
            }
            return Mensaje;
        }

        public static string ComprobarDisponibilidadDiayHoraDocenteModificar(HorarioDocente HorarioDocente, List<HorarioDocente> ListHorarioDocenteAnterior, int idCurso)
        {
            List<HorarioDocente> ListHorarioDocente = GetAllDocenteHorario();
            string Mensaje = string.Empty;
            DocenteManager dm = new DocenteManager();

            foreach (HorarioDocente hr in ListHorarioDocente)
            {
                if (hr.IdDia == HorarioDocente.IdDia && hr.IdHora == HorarioDocente.IdHora && hr.IdDocente == HorarioDocente.IdDocente)
                {
                    if (Contiene(ListHorarioDocenteAnterior, hr) == false)
                    {
                        Mensaje = "El Docente " + dm.getDocentebyDNI(HorarioDocente.IdDocente).Nombre + " " + dm.getDocentebyDNI(HorarioDocente.IdDocente).Apellido + " Ya posee ocupado el horario que selecciono, por favor elija otro docente!";
                    }
                }
            }
            return Mensaje;
        }

        public static bool Contiene(List<HorarioDocente> ListHorarioDocenteAnterior, HorarioDocente hd)
        {
            bool flag = false;
            foreach (HorarioDocente h in ListHorarioDocenteAnterior)
            {
                if (h.IdDia == hd.IdDia && h.IdDocente == hd.IdDocente && h.IdHora == hd.IdHora && h.IdMateria == hd.IdMateria)
                    flag = true;
            }
            return flag;
        }

        public static List<HorarioDocente> GetAllDocenteHorario()
        {
            List<HorarioDocente> ListHorarioDocente = new List<HorarioDocente>();

            HorarioDocenteDataContext db = new HorarioDocenteDataContext();

            var objeto = from x in db.HorarioDocentes
                         select x;

            foreach (var x in objeto)
            {
                ListHorarioDocente.Add(x);
            }

            return ListHorarioDocente;
        }

        public static List<HorarioDocente> GetDocenteHorarioByIdCurso(int idCurso)
        {
            List<HorarioDocente> ListHorarioDocente = new List<HorarioDocente>();

            HorarioDocenteDataContext db = new HorarioDocenteDataContext();

            var objeto = from x in db.HorarioDocentes
                         where x.IdCurso == idCurso
                         select x;

            foreach (var x in objeto)
            {
                ListHorarioDocente.Add(x);
            }

            return ListHorarioDocente;
        }

        public void guardarAsistenciaDocente(List<AsistenciaDocente> ListAsistenciaDocente)
        {
            AsistenciaDocenteDataContext db = new AsistenciaDocenteDataContext();
            try
            {
                foreach (AsistenciaDocente aa in ListAsistenciaDocente)
                {
                    db.AsistenciaDocentes.InsertOnSubmit(aa);
                    db.SubmitChanges();
                }
            }
            catch (Exception e)
            {
            }
        }

        public int getCantidadSegunDocenteMateri(int idMateria, int idDocente)
        {
            HorarioDocenteDataContext db = new HorarioDocenteDataContext();
            int contador = 0;
            var objeto = from x in db.HorarioDocentes
                         where x.IdMateria == idMateria
                         && x.IdDocente==idDocente
                         select x;

            foreach (var x in objeto)
            {
                contador++;
            }
            return contador;
        }

        
        public void updateHorariosDocenteXSuplente(List<HorarioDocente> ListHorarioDocente, int SuplenteDNI)
        {
            try
            {
                HorarioDocenteDataContext db = new HorarioDocenteDataContext();
                HorarioDocenteDataContext db2 = new HorarioDocenteDataContext();
                int suplantado=0;
                List<HorarioDocente> ListHorarioDocenteAGuardar = new List<HorarioDocente>();


                //Primero elimino lo anterior
                foreach (HorarioDocente hr in ListHorarioDocente)
                {

                    var objeto = from docente in db.HorarioDocentes
                                 where docente.IdCurso == hr.IdCurso
                                 && docente.IdDia == hr.IdDia
                                 && docente.IdDocente == hr.IdDocente
                                 && docente.IdHora == hr.IdHora
                                 && docente.IdMateria == hr.IdMateria
                                 select docente;

                    foreach (var docen in objeto)
                    {
                        
                        db.HorarioDocentes.DeleteOnSubmit(docen);
                        db.SubmitChanges();
                        
                        
                    }
                    suplantado = hr.IdDocente;
                    HorarioDocente hor = new HorarioDocente();
                    hor = hr;
                    hor.IdDocente = SuplenteDNI;
                    ListHorarioDocenteAGuardar.Add(hor);
                }

                //Guardo la nueva lista
                foreach (HorarioDocente hr in ListHorarioDocenteAGuardar)
                {
                    try
                    {
                        db2.HorarioDocentes.InsertOnSubmit(hr);
                        db2.SubmitChanges();
                    }
                    catch (Exception e)
                    {
                    }
                }
                


                //Guardo en la tabla de suplencias
                SuplenciaTemporalDataContext sdb = new SuplenciaTemporalDataContext();
                SuplenciaTemporal st = new SuplenciaTemporal();
                st.idSuplente = SuplenteDNI;
                st.idTitular = suplantado;


                try
                {
                    sdb.SuplenciaTemporals.InsertOnSubmit(st);
                    sdb.SubmitChanges();
                }
                catch (Exception e)
                {
                }
                

            }
            catch (Exception e)
            {
            }
        }

        public void updateHorariosDocenteXSuplenteVolverAtraz(List<HorarioDocente> ListHorarioDocente, int SuplenteDNI)
        {
            try
            {
                HorarioDocenteDataContext db = new HorarioDocenteDataContext();
                HorarioDocenteDataContext db2 = new HorarioDocenteDataContext();
                int suplantado = 0;
                List<HorarioDocente> ListHorarioDocenteAGuardar = new List<HorarioDocente>();


                //Primero elimino lo anterior
                foreach (HorarioDocente hr in ListHorarioDocente)
                {

                    var objeto = from docente in db.HorarioDocentes
                                 where docente.IdCurso == hr.IdCurso
                                 && docente.IdDia == hr.IdDia
                                 && docente.IdDocente == hr.IdDocente
                                 && docente.IdHora == hr.IdHora
                                 && docente.IdMateria == hr.IdMateria
                                 select docente;

                    foreach (var docen in objeto)
                    {

                        db.HorarioDocentes.DeleteOnSubmit(docen);
                        db.SubmitChanges();


                    }
                    suplantado = hr.IdDocente;
                    HorarioDocente hor = new HorarioDocente();
                    hor = hr;
                    hor.IdDocente = SuplenteDNI;
                    ListHorarioDocenteAGuardar.Add(hor);
                }

                //Guardo la nueva lista
                foreach (HorarioDocente hr in ListHorarioDocenteAGuardar)
                {
                    try
                    {
                        db2.HorarioDocentes.InsertOnSubmit(hr);
                        db2.SubmitChanges();
                    }
                    catch (Exception e)
                    {
                    }
                }



                //elimino en la tabla de suplencias
                SuplenciaTemporalDataContext sdb = new SuplenciaTemporalDataContext();

                var o = from docente in sdb.SuplenciaTemporals
                             where docente.idSuplente == suplantado
                             && docente.idTitular == SuplenteDNI
                             select docente;

                foreach (var docen in o)
                {
                    sdb.SuplenciaTemporals.DeleteOnSubmit(docen);
                    sdb.SubmitChanges();
                }


            }
            catch (Exception e)
            {
            }
        }

    }
}
